Skip to content

Instantly share code, notes, and snippets.

@tcurdt

tcurdt/cnc.hal Secret

Created July 5, 2022 21:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tcurdt/e9e6519bc24590627f2c7f01f19ecaa3 to your computer and use it in GitHub Desktop.
Save tcurdt/e9e6519bc24590627f2c7f01f19ecaa3 to your computer and use it in GitHub Desktop.
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
loadrt pid num_chan=4
loadrt hostmot2
loadrt hm2_eth board_ip="10.10.10.10" config="num_stepgens=5 num_encoders=0 num_pwmgens=0"
setp hm2_7i92.0.watchdog.timeout_ns 5000000
#net estop-loopback iocontrol.0.emc-enable-in <= iocontrol.0.user-enable-out
# threads
addf hm2_7i92.0.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.0.do-pid-calcs servo-thread
addf pid.1.do-pid-calcs servo-thread
addf pid.2.do-pid-calcs servo-thread
addf pid.3.do-pid-calcs servo-thread
addf hm2_7i92.0.write servo-thread
#hm2_7i92.0.led.CR01
#hm2_7i92.0.led.CR02
#hm2_7i92.0.led.CR03
#hm2_7i92.0.led.CR04
#hm2_7i92.0.gpio.000.in
#hm2_7i92.0.gpio.000.in_not
#hm2_7i92.0.gpio.000.out
#hm2_7i92.0.gpio.000.is_output
#hm2_7i92.0.gpio.000.is_opendrain
#hm2_7i92.0.gpio.000.invert_output
#hm2_7i92.0.stepgen.00.direction.invert_output
#spindle.0.on
#spindle.0.forward
#spindle.0.speed-in
#spindle.0.speed-out
#spindle.0.revs
#spindle.0.at-speed
#######################################
# joint 0
# pid
setp pid.0.Pgain [JOINT_0]P
setp pid.0.Igain [JOINT_0]I
setp pid.0.Dgain [JOINT_0]D
setp pid.0.bias [JOINT_0]BIAS
setp pid.0.FF0 [JOINT_0]FF0
setp pid.0.FF1 [JOINT_0]FF1
setp pid.0.FF2 [JOINT_0]FF2
setp pid.0.deadband [JOINT_0]DEADBAND
setp pid.0.maxoutput [JOINT_0]MAX_OUTPUT
setp pid.0.maxerror [JOINT_0]MAX_ERROR
setp pid.0.error-previous-target true
# enable
net joint-0-index-enable <=> pid.0.index-enable
net joint-0-enable <= joint.0.amp-enable-out
net joint-0-enable => pid.0.enable
net joint-0-enable => hm2_7i92.0.stepgen.00.enable
# stepgen
setp hm2_7i92.0.stepgen.00.dirsetup [JOINT_0]STEPGEN_DIRSETUP
setp hm2_7i92.0.stepgen.00.dirhold [JOINT_0]STEPGEN_DIRHOLD
setp hm2_7i92.0.stepgen.00.steplen [JOINT_0]STEPGEN_STEPLEN
setp hm2_7i92.0.stepgen.00.stepspace [JOINT_0]STEPGEN_STEPSPACE
setp hm2_7i92.0.stepgen.00.position-scale [JOINT_0]STEPGEN_SCALE
setp hm2_7i92.0.stepgen.00.maxvel [JOINT_0]STEPGEN_MAXVEL
setp hm2_7i92.0.stepgen.00.maxaccel [JOINT_0]STEPGEN_MAXACC
setp hm2_7i92.0.stepgen.00.step_type 0
setp hm2_7i92.0.stepgen.00.control-type 1
# feedback
net joint-0-pos-cmd <= joint.0.motor-pos-cmd
net joint-0-pos-cmd => pid.0.command
net joint-0-pos-fb <= hm2_7i92.0.stepgen.00.position-fb
net joint-0-pos-fb => joint.0.motor-pos-fb
net joint-0-pos-fb => pid.0.feedback
net joint.0.output <= pid.0.output
net joint.0.output => hm2_7i92.0.stepgen.00.velocity-cmd
#######################################
# joint 1
# pid
setp pid.1.Pgain [JOINT_1]P
setp pid.1.Igain [JOINT_1]I
setp pid.1.Dgain [JOINT_1]D
setp pid.1.bias [JOINT_1]BIAS
setp pid.1.FF0 [JOINT_1]FF0
setp pid.1.FF1 [JOINT_1]FF1
setp pid.1.FF2 [JOINT_1]FF2
setp pid.1.deadband [JOINT_1]DEADBAND
setp pid.1.maxoutput [JOINT_1]MAX_OUTPUT
setp pid.1.maxerror [JOINT_1]MAX_ERROR
setp pid.1.error-previous-target true
# enable
net joint-1-index-enable <=> pid.1.index-enable
net joint-1-enable <= joint.1.amp-enable-out
net joint-1-enable => pid.1.enable
net joint-1-enable => hm2_7i92.0.stepgen.01.enable
# stepgen
setp hm2_7i92.0.stepgen.01.dirsetup [JOINT_1]STEPGEN_DIRSETUP
setp hm2_7i92.0.stepgen.01.dirhold [JOINT_1]STEPGEN_DIRHOLD
setp hm2_7i92.0.stepgen.01.steplen [JOINT_1]STEPGEN_STEPLEN
setp hm2_7i92.0.stepgen.01.stepspace [JOINT_1]STEPGEN_STEPSPACE
setp hm2_7i92.0.stepgen.01.position-scale [JOINT_1]STEPGEN_SCALE
setp hm2_7i92.0.stepgen.01.maxvel [JOINT_1]STEPGEN_MAXVEL
setp hm2_7i92.0.stepgen.01.maxaccel [JOINT_1]STEPGEN_MAXACC
setp hm2_7i92.0.stepgen.01.step_type 0
setp hm2_7i92.0.stepgen.01.control-type 1
# feedback
net joint-1-pos-cmd <= joint.1.motor-pos-cmd
net joint-1-pos-cmd => pid.1.command
net joint-1-pos-fb <= hm2_7i92.0.stepgen.01.position-fb
net joint-1-pos-fb => joint.1.motor-pos-fb
net joint-1-pos-fb => pid.1.feedback
net joint.1.output <= pid.1.output
net joint.1.output => hm2_7i92.0.stepgen.01.velocity-cmd
#######################################
# joint 2
# pid
setp pid.2.Pgain [JOINT_2]P
setp pid.2.Igain [JOINT_2]I
setp pid.2.Dgain [JOINT_2]D
setp pid.2.bias [JOINT_2]BIAS
setp pid.2.FF0 [JOINT_2]FF0
setp pid.2.FF1 [JOINT_2]FF1
setp pid.2.FF2 [JOINT_2]FF2
setp pid.2.deadband [JOINT_2]DEADBAND
setp pid.2.maxoutput [JOINT_2]MAX_OUTPUT
setp pid.2.maxerror [JOINT_2]MAX_ERROR
setp pid.2.error-previous-target true
# enable
net joint-2-index-enable <=> pid.2.index-enable
net joint-2-enable <= joint.2.amp-enable-out
net joint-2-enable => pid.2.enable
net joint-2-enable => hm2_7i92.0.stepgen.02.enable
# stepgen
setp hm2_7i92.0.stepgen.02.dirsetup [JOINT_2]STEPGEN_DIRSETUP
setp hm2_7i92.0.stepgen.02.dirhold [JOINT_2]STEPGEN_DIRHOLD
setp hm2_7i92.0.stepgen.02.steplen [JOINT_2]STEPGEN_STEPLEN
setp hm2_7i92.0.stepgen.02.stepspace [JOINT_2]STEPGEN_STEPSPACE
setp hm2_7i92.0.stepgen.02.position-scale [JOINT_2]STEPGEN_SCALE
setp hm2_7i92.0.stepgen.02.maxvel [JOINT_2]STEPGEN_MAXVEL
setp hm2_7i92.0.stepgen.02.maxaccel [JOINT_2]STEPGEN_MAXACC
setp hm2_7i92.0.stepgen.02.step_type 0
setp hm2_7i92.0.stepgen.02.control-type 1
# feedback
net joint-2-pos-cmd <= joint.2.motor-pos-cmd
net joint-2-pos-cmd => pid.2.command
net joint-2-pos-fb <= hm2_7i92.0.stepgen.02.position-fb
net joint-2-pos-fb => joint.2.motor-pos-fb
net joint-2-pos-fb => pid.2.feedback
net joint.2.output <= pid.2.output
net joint.2.output => hm2_7i92.0.stepgen.02.velocity-cmd
#######################################
# joint 3
# pid
setp pid.3.Pgain [JOINT_3]P
setp pid.3.Igain [JOINT_3]I
setp pid.3.Dgain [JOINT_3]D
setp pid.3.bias [JOINT_3]BIAS
setp pid.3.FF0 [JOINT_3]FF0
setp pid.3.FF1 [JOINT_3]FF1
setp pid.3.FF2 [JOINT_3]FF2
setp pid.3.deadband [JOINT_3]DEADBAND
setp pid.3.maxoutput [JOINT_3]MAX_OUTPUT
setp pid.3.maxerror [JOINT_3]MAX_ERROR
setp pid.3.error-previous-target true
# enable
net joint-3-index-enable <=> pid.3.index-enable
net joint-3-enable <= joint.3.amp-enable-out
net joint-3-enable => pid.3.enable
net joint-3-enable => hm2_7i92.0.stepgen.03.enable
# stepgen
setp hm2_7i92.0.stepgen.03.dirsetup [JOINT_3]STEPGEN_DIRSETUP
setp hm2_7i92.0.stepgen.03.dirhold [JOINT_3]STEPGEN_DIRHOLD
setp hm2_7i92.0.stepgen.03.steplen [JOINT_3]STEPGEN_STEPLEN
setp hm2_7i92.0.stepgen.03.stepspace [JOINT_3]STEPGEN_STEPSPACE
setp hm2_7i92.0.stepgen.03.position-scale [JOINT_3]STEPGEN_SCALE
setp hm2_7i92.0.stepgen.03.maxvel [JOINT_3]STEPGEN_MAXVEL
setp hm2_7i92.0.stepgen.03.maxaccel [JOINT_3]STEPGEN_MAXACC
setp hm2_7i92.0.stepgen.03.step_type 0
setp hm2_7i92.0.stepgen.03.control-type 1
# feedback
net joint-3-pos-cmd <= joint.3.motor-pos-cmd
net joint-3-pos-cmd => pid.3.command
net joint-3-pos-fb <= hm2_7i92.0.stepgen.03.position-fb
net joint-3-pos-fb => joint.3.motor-pos-fb
net joint-3-pos-fb => pid.3.feedback
net joint.3.output <= pid.3.output
net joint.3.output => hm2_7i92.0.stepgen.03.velocity-cmd
#######################################
# spindle
#######################################
# halui
#net machine-is-on halui.machine.is-on
#net machine-is-enabled <= motion.motion-enabled
[EMC]
VERSION = 1.1
MACHINE = printnc
DEBUG = 0x00000000
[MESA]
VERSION = 0.6.3
BOARD = 7i92
FIRMWARE = 7i92_5ABOBx2D.bit
CARD_0 = 5ABOB
CARD_1 = 5ABOB
[DISPLAY]
DISPLAY = axis
#DISPLAY = gmoccapy
PROGRAM_PREFIX = /home/tcurdt/linuxcnc/nc_files
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = COMMANDED
MAX_FEED_OVERRIDE = 1.2
MIN_VELOCITY = 0.0
DEFAULT_LINEAR_VELOCITY = 10.0
MAX_LINEAR_VELOCITY = 200.0
CYCLE_TIME = 0.1
INTRO_GRAPHIC = emc2.gif
INTRO_TIME = 0
#PYVCP = vfd.xml
[KINS]
KINEMATICS = trivkins coordinates=XYYZ kinstype=BOTH
JOINTS = 4
[EMCIO]
EMCIO = iov2
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl
#TOOL_CHANGE_POSITION = 0 0 2
[RS274NGC]
PARAMETER_FILE = printnc.var
SUBROUTINE_PATH = /home/tcurdt/linuxcnc/subroutines
[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
SERVO_PERIOD = 1000000
[TASK]
TASK = milltask
CYCLE_TIME = 0.010
[TRAJ]
COORDINATES = XYYZ
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
NO_FORCE_HOMING = 1
#DEFAULT_LINEAR_VELOCITY = 0.0167
#DEFAULT_LINEAR_ACCELERATION = 2.0
#MAX_LINEAR_VELOCITY = 5.0
#MAX_LINEAR_ACCELERATION = 20.0
#HOME = 0 0 0 0 0 0 0 0 0
[HAL]
HALUI = halui
HALFILE = printnc.hal
#HALFILE = modbus.hal
#HALFILE = tool.hal
#HALFILE = probe.hal
#POSTGUI_HALFILE = vfd.hal
[HALUI]
[AXIS_X]
MIN_LIMIT = -10
MAX_LIMIT = 1000
MAX_VELOCITY = 1.2
MAX_ACCELERATION = 20.0
[AXIS_Y]
MIN_LIMIT = -10
MAX_LIMIT = 800
MAX_VELOCITY = 1.2
MAX_ACCELERATION = 20.0
[AXIS_Z]
MIN_LIMIT = -10
MAX_LIMIT = 300
MAX_VELOCITY = 1.2
MAX_ACCELERATION = 20.0
[JOINT_0]
AXIS = X
TYPE = LINEAR
MIN_LIMIT = -10
MAX_LIMIT = 1000
MAX_VELOCITY = 1.2
MAX_ACCELERATION = 20.0
MIN_FERROR = 0.01
FERROR = 1.0
BIAS = 0
P = 1000
I = 0
D = 0
FF0 = 0
FF1 = 1
FF2 = 0
DEADBAND = 0.000015
MAX_OUTPUT = 0
MAX_ERROR = 0.0127
HOME = 0.0
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_FINAL_VEL = 0.0
STEPGEN_DIRSETUP = 100000
STEPGEN_DIRHOLD = 100000
STEPGEN_STEPLEN = 10000
STEPGEN_STEPSPACE = 10000
STEPGEN_SCALE = 4000
STEPGEN_MAXVEL = 1.5
STEPGEN_MAXACC = 25
STEPGEN_STEP_INVERT = False
STEPGEN_DIR_INVERT = False
[JOINT_1]
AXIS = Y
TYPE = LINEAR
MIN_LIMIT = -10
MAX_LIMIT = 800
MAX_VELOCITY = 1.2
MAX_ACCELERATION = 20.0
MIN_FERROR = 0.01
FERROR = 1.0
BIAS = 0
P = 1000
I = 0
D = 0
FF0 = 0
FF1 = 1
FF2 = 0
DEADBAND = 0.000015
MAX_OUTPUT = 0
MAX_ERROR = 0.0127
HOME = 0.0
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_FINAL_VEL = 0.0
STEPGEN_DIRSETUP = 100000
STEPGEN_DIRHOLD = 100000
STEPGEN_STEPLEN = 10000
STEPGEN_STEPSPACE = 10000
STEPGEN_SCALE = 4000
STEPGEN_MAXVEL = 1.5
STEPGEN_MAXACC = 25
STEPGEN_STEP_INVERT = False
STEPGEN_DIR_INVERT = False
[JOINT_2]
AXIS = Y
TYPE = LINEAR
MIN_LIMIT = -10
MAX_LIMIT = 800
MAX_VELOCITY = 1.2
MAX_ACCELERATION = 20.0
MIN_FERROR = 0.01
FERROR = 1.0
BIAS = 0
P = 1000
I = 0
D = 0
FF0 = 0
FF1 = 1
FF2 = 0
DEADBAND = 0.000015
MAX_OUTPUT = 0
MAX_ERROR = 0.0127
HOME = 0.0
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_FINAL_VEL = 0.0
STEPGEN_DIRSETUP = 100000
STEPGEN_DIRHOLD = 100000
STEPGEN_STEPLEN = 10000
STEPGEN_STEPSPACE = 10000
STEPGEN_SCALE = 4000
STEPGEN_MAXVEL = 1.5
STEPGEN_MAXACC = 25
STEPGEN_STEP_INVERT = False
STEPGEN_DIR_INVERT = False
[JOINT_3]
AXIS = Z
TYPE = LINEAR
MIN_LIMIT = -10
MAX_LIMIT = 300
MAX_VELOCITY = 1.2
MAX_ACCELERATION = 20.0
MIN_FERROR = 0.01
FERROR = 1.0
BIAS = 0
P = 1000
I = 0
D = 0
FF0 = 0
FF1 = 1
FF2 = 0
DEADBAND = 0.000015
MAX_OUTPUT = 0
MAX_ERROR = 0.0127
HOME = 0.0
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_FINAL_VEL = 0.0
STEPGEN_DIRSETUP = 100000
STEPGEN_DIRHOLD = 100000
STEPGEN_STEPLEN = 10000
STEPGEN_STEPSPACE = 10000
STEPGEN_SCALE = 4000
STEPGEN_MAXVEL = 1.5
STEPGEN_MAXACC = 25
STEPGEN_STEP_INVERT = False
STEPGEN_DIR_INVERT = False
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment